package org.jeecg.codegeneweb;

import cn.hutool.core.util.StrUtil;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.jeecg.codegeneweb.domian.column.ColumnVoDomain;
import org.jeecg.codegeneweb.vo.WebModelVo;
import org.jeecg.common.util.oConvertUtils;
import org.jeecgframework.codegenerate.generate.pojo.ColumnVo;
import org.jeecgframework.codegenerate.generate.pojo.TableVo;

import java.io.File;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Data
@Slf4j
public class ParentMapSetFromWebModelVo {
    public void buildMap(Map<String, Object> map, WebModelVo webModelVo){
        setPublicMap(map, webModelVo);
        settableVo(map, webModelVo);
        setCollection(map, webModelVo);
        //return map;
    }
    protected void setPublicMap(Map<String, Object> hashMap, WebModelVo webModelVo){
        //String bussi_package="org.jeecg.modules.demo";//=org.jeecg.modules.demo  ---程序定义的规范
        String bussi_package=PublicPara.BUSSI_PACKAGE;
        //注意：后续要修复预先将buss_package 变换为目录的形式，避免在目录中作为一个字符串的目录
        //公共的
        long serialVersionUID = (new SecureRandom()).nextLong() + System.currentTimeMillis();
        hashMap.put("serialVersionUID", String.valueOf(serialVersionUID));
        //hashMap.put("bussiPackage", "\\org\\jeecg\\modules\\demo\\");
        hashMap.put("bussiPackage",  bussi_package);//+ File.separator+webModelVo.getPackageName());
        hashMap.put("entityPackage", webModelVo.getTableVoDomain().getEntityName().toLowerCase());
        hashMap.put("entityName", webModelVo.getTableVoDomain().getEntityName());
        hashMap.put("tableName", webModelVo.getTableVoDomain().getTableName());
        hashMap.put("primaryKeyField", "id");

        //补充3.7.1版本
        hashMap.put("entityPackagePath", webModelVo.getTableVoDomain().getEntityName().toLowerCase());

        //return hashMap;
    }
    protected void settableVo(Map<String, Object> hashMap, WebModelVo webModelVo){

        //设置tablevo
        TableVo tableVo=new TableVo();
        tableVo.setTableName(webModelVo.getTableVoDomain().getTableName());
        tableVo.setEntityName(webModelVo.getTableVoDomain().getEntityName());
        tableVo.setEntityPackage(webModelVo.getPackageName());
        tableVo.setFtlDescription(webModelVo.getTableVoDomain().getTableTxt());
        tableVo.setSearchFieldNum(-1);
        String formTemplate = webModelVo.getTableVoDomain().getFormTemplate();
        if (oConvertUtils.isEmpty(formTemplate)) {
            tableVo.setFieldRowNum(1);
        } else {
            tableVo.setFieldRowNum(Integer.parseInt(formTemplate));
        }
        HashMap hashinteriorMap = new HashMap();
        hashinteriorMap.put("scroll", webModelVo.getTableVoDomain().getScroll() == null ? "0" : webModelVo.getTableVoDomain().getScroll().toString());
        tableVo.setExtendParams(hashinteriorMap);
        if (tableVo.getFieldRequiredNum() == null) {
            tableVo.setFieldRequiredNum(StringUtils.isNotEmpty("4") ? Integer.parseInt("4") : -1);
        }

        if (tableVo.getSearchFieldNum() == null) {
            tableVo.setSearchFieldNum(StringUtils.isNotEmpty("1") ? Integer.parseInt("1") : -1);
        }

        if (tableVo.getFieldRowNum() == null) {
            tableVo.setFieldRowNum(Integer.parseInt("1"));
        }

        hashMap.put("tableVo", tableVo);
        //return hashMap;

    }

    protected void setCollection(Map<String, Object> hashMap, WebModelVo webModelVo){

            List<ColumnVoDomain> columnVoDomainList =webModelVo.getTableVoDomain().getColumnVoDomainList();
            List<ColumnVo> columnVoList=new ArrayList<>();
            for(ColumnVoDomain columnVoDomain : columnVoDomainList){
                ColumnVo columnVo=new ColumnVo();
                columnVo.setFieldName(columnVoDomain.getDbVo().getFieldName());
                System.out.println("当前正在执行的是:"+ columnVoDomain.getDbVo().getFieldName());
                log.info("当前正在执行的是:"+ columnVoDomain.getDbVo().getFieldName());;
                columnVo.setNullable(columnVoDomain.getDbVo().getDbIsNull().toString().equals("1")?"Y":"N");//.getNullable());
                columnVo.setFieldType(columnVoDomain.getDbVo().getFieldType());//.getDbType());
                columnVo.setFieldDbType(columnVoDomain.getDbVo().getDbType());//.getDbFieldName());
                columnVo.setFieldDbName(columnVoDomain.getDbVo().getDbFieldName());//.getFieldType());
                columnVo.setFiledComment(columnVoDomain.getDbVo().getDbFieldTxt());
                columnVo.setClassType(columnVoDomain.getPageVo().getFieldShowType());
                columnVo.setOptionType("");
                columnVo.setCharmaxLength("");
                columnVo.setPrecision(null);
                columnVo.setScale(null);
                columnVo.setClassType_row(columnVoDomain.getPageVo().getFieldShowType());
                columnVo.setDefaultVal(columnVoDomain.getDbVo().getDbDefaultVal());
                columnVo.setFieldLength(columnVoDomain.getDbVo().getDbLength());
                columnVo.setFieldHref("");
                columnVo.setFieldValidType(null);
                columnVo.setFieldDefault("");
                columnVo.setFieldOrderNum(columnVoDomain.getPageVo().getOrderNum());
                columnVo.setFieldShowType(columnVoDomain.getPageVo().getFieldShowType());
                columnVo.setIsKey(columnVoDomain.getDbVo().getDbIsKey().toString().equals("1")?"Y":"N");
                columnVo.setIsQuery(columnVoDomain.getPageVo().getIsQuery().toString().equals("1")?"Y":"N");
                columnVo.setIsShow(columnVoDomain.getPageVo().getIsShowForm().toString().equals("1")?"Y":"N");
                columnVo.setIsShowList(columnVoDomain.getPageVo().getIsShowList().toString().equals("1")?"Y":"N");
                columnVo.setQueryMode(columnVoDomain.getPageVo().getQueryMode());
                columnVo.setReadonly(columnVoDomain.getPageVo().getIsReadOnly().toString().equals("1")?"Y":"N");
                columnVo.setSort(columnVoDomain.getPageVo().getSortFlag());
                columnVo.setFieldOrderNum(columnVoDomain.getPageVo().getOrderNum());
                try {
                    columnVo.setDictField(columnVoDomain.getValidateVo().getDictField().length()!=0? columnVoDomain.getValidateVo().getDictField().toString():"");
                    columnVo.setDictTable(columnVoDomain.getValidateVo().getDictTable());
                    columnVo.setDictText(columnVoDomain.getValidateVo().getDictText());
                }catch (Exception ex){
                    System.out.println("错误的位置在columnVo10.setDictField(columnVoDomian.getValidateVo():"+ex.toString());
                }

            /*columnVo10.setDictTable("");
            columnVo10.setDictText("");*/
                columnVoList.add(columnVo);
            }
            hashMap.put("originalColumns", columnVoList);
            List<ColumnVo> newaddedColumn=columnVoList.stream()
                .filter(x->x.getIsShowList().equalsIgnoreCase("Y")||x.getIsShow().equalsIgnoreCase("Y"))
                .collect(Collectors.toList());
            hashMap.put("columns", newaddedColumn);
            //return hashMap;
        };

    public static void main(String[] args) throws Exception{
        String name="xyz";
        //name=StrUtil.sub(name,0,1);
        name=StrUtil.subAfter(name,"x",true);

        System.out.println(name);
    }
    }

